ngx-edge-slider 2.2.4 → 2.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/assets/ngx-simple-slider.min.css +1 -1
  2. package/assets/ngx-simple-slider.min.css.map +1 -1
  3. package/assets/ngx-simple-slider.scss +4 -2
  4. package/esm2022/lib/component/simple-slider.component.mjs +12 -6
  5. package/esm2022/lib/engine/slider-engine.service.mjs +84 -30
  6. package/esm2022/lib/models/slider-config.model.mjs +1 -1
  7. package/esm2022/lib/models/slider-state.model.mjs +2 -1
  8. package/esm2022/lib/plugins/autoplay/autoplay-config.model.mjs +18 -0
  9. package/esm2022/lib/plugins/autoplay/autoplay.plugin.mjs +126 -17
  10. package/esm2022/lib/plugins/draggable/draggable.plugin.mjs +34 -7
  11. package/esm2022/lib/plugins/slider-plugin.mjs +1 -1
  12. package/fesm2022/ngx-edge-slider.mjs +280 -84
  13. package/fesm2022/ngx-edge-slider.mjs.map +1 -1
  14. package/lib/component/simple-slider.component.d.ts +2 -1
  15. package/lib/engine/slider-engine.service.d.ts +7 -0
  16. package/lib/models/slider-config.model.d.ts +2 -6
  17. package/lib/models/slider-state.model.d.ts +1 -0
  18. package/lib/plugins/autoplay/autoplay-config.model.d.ts +10 -0
  19. package/lib/plugins/autoplay/autoplay.plugin.d.ts +23 -4
  20. package/lib/plugins/draggable/draggable.plugin.d.ts +6 -2
  21. package/lib/plugins/slider-plugin.d.ts +1 -0
  22. package/package.json +2 -2
  23. package/assets/ngx-simple-slider.css +0 -1
  24. package/assets/ngx-simple-slider.css.map +0 -1
  25. package/assets/ngx-simple.slider.css +0 -413
  26. package/esm2022/WingmanColt-ngx-edge-slider.mjs +0 -5
  27. package/fesm2022/WingmanColt-ngx-edge-slider.mjs +0 -824
  28. package/fesm2022/WingmanColt-ngx-edge-slider.mjs.map +0 -1
@@ -1 +1 @@
1
- :host{display:block;position:relative}.slider-main-product{display:inline-flex;height:520px}.slider-main{width:100%;height:600px;justify-content:center;display:flex}@media(max-width: 577px){.slider-main{height:100%;display:block}}.slider--main{height:100%;overflow:hidden}.slider--main .slider__wrapper{display:flex;will-change:transform}.slider--main .slider__wrapper .slide{flex:0 0 100%}.slider--main .slider__wrapper .slide .slide-content,.slider--main .slider__wrapper .slide picture{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.slider--main .slider__wrapper .slide .slide-content .drag-handle,.slider--main .slider__wrapper .slide picture .drag-handle{width:100%;height:100%;cursor:grab;z-index:10;pointer-events:all}.slider--main .slider__wrapper .slide .slide-content img,.slider--main .slider__wrapper .slide picture img{max-width:100%;max-height:100%;object-fit:contain;display:block;transform-origin:center;transform:translateZ(0);pointer-events:none}.slider--thumbs{margin-top:24px;margin-bottom:36px;height:70px !important}.slider--thumbs .slider__wrapper{display:flex;gap:8px;will-change:transform;transform:translateZ(0)}.slider--thumbs .slide{flex:0 0 auto;pointer-events:auto}.slider--thumbs .slide .slide-content{width:54px;height:68px;display:flex;align-items:center;justify-content:center;border:1px solid #ebebeb;cursor:pointer}.slider--thumbs .slide .slide-content img{max-width:100%;max-height:100%;object-fit:contain;display:block;transform:scale(0.9)}.slider--thumbs .slide .slide-content.slide--current{border-color:#212121}.slider{width:100%;height:100%;overflow:hidden;position:relative;touch-action:none;cursor:grab;user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.slider.slider-can-drag{cursor:grab}.slider.slider-is-dragging{cursor:grabbing}.slider.slider-dragged{box-shadow:0 0 10px rgba(0,0,0,.1)}.slider.slider-drag-prevent-click{pointer-events:none}.slider .slider__wrapper{display:flex;transition:transform 300ms cubic-bezier(0.25, 0.46, 0.45, 0.84);will-change:transform;transform:none;width:auto;height:100%}.slider .slide{display:flex;align-items:center;justify-content:center;height:100%;overflow:hidden;flex-shrink:0;position:relative;transition:transform 300ms cubic-bezier(0.25, 0.46, 0.45, 0.84)}@media(min-width: 1441px){.slider--thumbs .slide{flex:0 0 20%}}@media(max-width: 1024px){.slider--thumbs .slide{flex:0 0 33.333%}}@media(max-width: 1023px){.slider--thumbs .slide{flex:0 0 50%}}.slider-arrow-next,.slider-arrow-prev{position:absolute;top:50%;transform:translateY(-50%);width:32px;height:32px;background:hsla(0,0%,100%,.8) no-repeat center center;cursor:pointer;z-index:10}.slider-arrow-next.next,.slider-arrow-prev.next{right:10px}.slider-arrow-next.prev,.slider-arrow-prev.prev{left:10px}.thumbs-wrapper{position:relative}.thumb-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:20;width:48px;height:48px;background:hsla(0,0%,100%,.9) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='4.51 0.01 10.99 19.97'%3E%3Cpath fill='%23000' d='m4.508 18.968 1.006 1.006 9.983-9.984L5.514.005 4.508 1.011l8.984 8.984-8.984 8.973Z'/%3E%3C/svg%3E") no-repeat center center/11px 18px;font-size:36px;line-height:56px;opacity:0;pointer-events:none;transition:opacity 200ms ease}.thumb-nav.activeArrow{opacity:1;pointer-events:all}.thumb-nav--left{left:-73px;transform:translateY(-50%) rotate(180deg) !important}.thumb-nav--right{right:-65px}.slider-pagination .thumb-dots-wrapper{display:flex;align-items:center;justify-content:center;gap:7px}.slider-pagination .thumb-dots-wrapper .thumb-dot{display:inline-block;width:4px;height:4px;margin:0 0 0 8px;border-radius:50%;background:#b3b3b3}.slider-pagination .thumb-dots-wrapper .thumb-dot.active{background:#212121;border:1px solid #212121}.slider-pagination .thumb-dots-wrapper .thumb-dot:hover{background:#212121;border:1px solid #212121}.slider-pagination .thumb-dots-wrapper .thumb-dot.hidden{opacity:0;pointer-events:none}.slider-container{position:relative;z-index:10}.slider-container .slider{position:relative;z-index:1}.slider-container .slider.slider-is-dragging{pointer-events:none}.slider-container .slider-nav{position:absolute;inset:0;pointer-events:none;z-index:20}.slider-container .slider-nav .nav-btn{pointer-events:auto;z-index:30;position:absolute;width:42px;height:42px;border-radius:2px;display:inline-flex;align-items:center;justify-content:center;border:0;cursor:pointer;background:rgba(0,0,0,0);font-size:32px;line-height:1;transition:transform .15s ease,opacity .15s ease}.slider-container .slider-nav .nav-btn:hover{transform:translateY(-1px);background:rgba(0,0,0,.6)}.slider-container .slider-nav .nav-btn.is-hidden{color:rgba(160,160,165,.5529411765);opacity:.3;cursor:not-allowed;pointer-events:auto}.slider-container .slider-nav.nav--top-left .nav-btn--prev{top:-50px;left:-20px}.slider-container .slider-nav.nav--top-left .nav-btn--next{top:-50px;left:42px}.slider-container .slider-nav.nav--top-center .nav-btn--prev{top:-50px;left:50%;transform:translateX(-50px)}.slider-container .slider-nav.nav--top-center .nav-btn--next{top:-50px;left:50%;transform:translateX(10px)}.slider-container .slider-nav.nav--top-right .nav-btn--prev{top:-50px;right:42px}.slider-container .slider-nav.nav--top-right .nav-btn--next{top:-50px;right:-20px}.slider-container .slider-nav.nav--bottom-left .nav-btn--prev{bottom:30px;left:-20px}.slider-container .slider-nav.nav--bottom-left .nav-btn--next{bottom:30px;left:42px}.slider-container .slider-nav.nav--bottom-center .nav-btn--prev{bottom:30px;left:50%;transform:translateX(-50px)}.slider-container .slider-nav.nav--bottom-center .nav-btn--next{bottom:30px;left:50%;transform:translateX(10px)}.slider-container .slider-nav.nav--bottom-right .nav-btn--prev{bottom:30px;right:42px}.slider-container .slider-nav.nav--bottom-right .nav-btn--next{bottom:30px;right:-20px}.slider-container .slider-nav.nav--center-sides .nav-btn{background:rgba(0,0,0,.7);color:#fff}.slider-container .slider-nav.nav--center-sides .nav-btn--prev{top:50%;left:-50px;transform:translateY(-50%)}.slider-container .slider-nav.nav--center-sides .nav-btn--next{top:50%;right:-50px;transform:translateY(-50%)}@media(max-width: 1024px){.slider-container .slider-nav .nav--top-left .nav-btn--prev,.slider-container .slider-nav .nav--top-center .nav-btn--prev,.slider-container .slider-nav .nav--top-right .nav-btn--prev,.slider-container .slider-nav .nav--bottom-left .nav-btn--prev,.slider-container .slider-nav .nav--bottom-center .nav-btn--prev,.slider-container .slider-nav .nav--bottom-right .nav-btn--prev,.slider-container .slider-nav .nav--center-sides .nav-btn--prev{left:clamp(8px,5%,40px);right:auto}.slider-container .slider-nav .nav--top-left .nav-btn--next,.slider-container .slider-nav .nav--top-center .nav-btn--next,.slider-container .slider-nav .nav--top-right .nav-btn--next,.slider-container .slider-nav .nav--bottom-left .nav-btn--next,.slider-container .slider-nav .nav--bottom-center .nav-btn--next,.slider-container .slider-nav .nav--bottom-right .nav-btn--next,.slider-container .slider-nav .nav--center-sides .nav-btn--next{right:clamp(8px,5%,20px);left:auto}}@media(max-width: 768px){.slider-container .slider-nav .nav-btn{width:36px;height:36px;font-size:24px}}@media(max-width: 480px){.slider-container .slider-nav .slider-container .slider-nav.nav--center-sides{pointer-events:auto}.slider-container .slider-nav .slider-container .slider-nav.nav--center-sides .nav-btn{width:32px;height:32px;font-size:20px;pointer-events:auto;z-index:20;background:rgba(0,0,0,.7);color:#fff}.slider-container .slider-nav .slider-container .slider__wrapper{position:relative}.slider-container .slider-nav .slider-container .slider__wrapper .slide-content{pointer-events:auto}.slider-container .slider-nav .nav-btn{width:32px;height:32px;font-size:20px}.slider-container .slider-nav .nav-btn--prev{left:8px !important;right:auto !important}.slider-container .slider-nav .nav-btn--next{right:8px !important;left:auto !important}}/*# sourceMappingURL=ngx-simple-slider.min.css.map */
1
+ :host{display:block;position:relative}.slider-main-product{display:inline-flex;height:520px}.slider-main{width:100%;height:600px;justify-content:center;display:flex}@media(max-width: 577px){.slider-main{height:100%;display:block}}.slider--main{height:100%;overflow:hidden}.slider--main .slider__wrapper{display:flex;will-change:transform}.slider--main .slider__wrapper .slide{flex:0 0 100%}.slider--main .slider__wrapper .slide .slide-content,.slider--main .slider__wrapper .slide picture{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.slider--main .slider__wrapper .slide .slide-content .drag-handle,.slider--main .slider__wrapper .slide picture .drag-handle{width:100%;height:100%;cursor:grab;z-index:10;pointer-events:all}.slider--main .slider__wrapper .slide .slide-content img,.slider--main .slider__wrapper .slide picture img{max-width:100%;max-height:100%;object-fit:contain;display:block;transform-origin:center;transform:translateZ(0);pointer-events:none}.slider--thumbs{margin-top:24px;margin-bottom:36px;height:70px !important}.slider--thumbs .slider__wrapper{display:flex;gap:8px;will-change:transform;transform:translateZ(0)}.slider--thumbs .slide{flex:0 0 auto;pointer-events:auto}.slider--thumbs .slide .slide-content{width:54px;height:68px;display:flex;align-items:center;justify-content:center;border:1px solid #ebebeb;cursor:pointer}.slider--thumbs .slide .slide-content img{max-width:100%;max-height:100%;object-fit:contain;display:block;transform:scale(0.9)}.slider--thumbs .slide .slide-content.slide--current{border-color:#212121}.slider{width:100%;height:100%;overflow:hidden;position:relative;touch-action:pan-y;cursor:grab;user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.slider.slider-can-drag{cursor:grab;touch-action:none}.slider.slider-is-dragging{cursor:grabbing}.slider.slider-dragged{box-shadow:0 0 10px rgba(0,0,0,.1)}.slider.slider-drag-prevent-click{pointer-events:none}.slider .slider__wrapper{display:flex;transition:transform 300ms cubic-bezier(0.25, 0.46, 0.45, 0.84);will-change:transform;transform:none;width:auto;height:100%}.slider .slide{display:flex;align-items:center;justify-content:center;height:100%;overflow:hidden;flex-shrink:0;position:relative;transition:transform 300ms cubic-bezier(0.25, 0.46, 0.45, 0.84)}@media(min-width: 1441px){.slider--thumbs .slide{flex:0 0 20%}}@media(max-width: 1024px){.slider--thumbs .slide{flex:0 0 33.333%}}@media(max-width: 1023px){.slider--thumbs .slide{flex:0 0 50%}}.slider-arrow-next,.slider-arrow-prev{position:absolute;top:50%;transform:translateY(-50%);width:32px;height:32px;background:hsla(0,0%,100%,.8) no-repeat center center;cursor:pointer;z-index:10}.slider-arrow-next.next,.slider-arrow-prev.next{right:10px}.slider-arrow-next.prev,.slider-arrow-prev.prev{left:10px}.thumbs-wrapper{position:relative}.thumb-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:20;width:48px;height:48px;background:hsla(0,0%,100%,.9) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='4.51 0.01 10.99 19.97'%3E%3Cpath fill='%23000' d='m4.508 18.968 1.006 1.006 9.983-9.984L5.514.005 4.508 1.011l8.984 8.984-8.984 8.973Z'/%3E%3C/svg%3E") no-repeat center center/11px 18px;font-size:36px;line-height:56px;opacity:0;pointer-events:none;transition:opacity 200ms ease}.thumb-nav.activeArrow{opacity:1;pointer-events:all}.thumb-nav--left{left:-73px;transform:translateY(-50%) rotate(180deg) !important}.thumb-nav--right{right:-65px}.slider-pagination .thumb-dots-wrapper{display:flex;align-items:center;justify-content:center;gap:7px}.slider-pagination .thumb-dots-wrapper .thumb-dot{display:inline-block;width:4px;height:4px;margin:0 0 0 8px;border-radius:50%;background:#b3b3b3}.slider-pagination .thumb-dots-wrapper .thumb-dot.active{background:#212121;border:1px solid #212121}.slider-pagination .thumb-dots-wrapper .thumb-dot:hover{background:#212121;border:1px solid #212121}.slider-pagination .thumb-dots-wrapper .thumb-dot.hidden{opacity:0;pointer-events:none}.slider-container{position:relative;z-index:2}.slider-container .slider{position:relative;z-index:1}.slider-container .slider.slider-is-dragging{pointer-events:none}.slider-container .slider-nav{position:absolute;inset:0;pointer-events:none;z-index:20}.slider-container .slider-nav .nav-btn{pointer-events:auto;z-index:30;position:absolute;width:42px;height:42px;border-radius:2px;display:inline-flex;align-items:center;justify-content:center;border:0;cursor:pointer;background:rgba(0,0,0,0);font-size:32px;line-height:1;transition:transform .15s ease,opacity .15s ease}.slider-container .slider-nav .nav-btn:hover{transform:translateY(-1px);background:rgba(0,0,0,.6)}.slider-container .slider-nav .nav-btn.is-hidden{color:rgba(160,160,165,.5529411765);opacity:.3;cursor:not-allowed;pointer-events:auto}.slider-container .slider-nav.nav--top-left .nav-btn--prev{top:-50px;left:-20px}.slider-container .slider-nav.nav--top-left .nav-btn--next{top:-50px;left:42px}.slider-container .slider-nav.nav--top-center .nav-btn--prev{top:-50px;left:50%;transform:translateX(-50px)}.slider-container .slider-nav.nav--top-center .nav-btn--next{top:-50px;left:50%;transform:translateX(10px)}.slider-container .slider-nav.nav--top-right .nav-btn--prev{top:-50px;right:42px}.slider-container .slider-nav.nav--top-right .nav-btn--next{top:-50px;right:-20px}.slider-container .slider-nav.nav--bottom-left .nav-btn--prev{bottom:30px;left:-20px}.slider-container .slider-nav.nav--bottom-left .nav-btn--next{bottom:30px;left:42px}.slider-container .slider-nav.nav--bottom-center .nav-btn--prev{bottom:30px;left:50%;transform:translateX(-50px)}.slider-container .slider-nav.nav--bottom-center .nav-btn--next{bottom:30px;left:50%;transform:translateX(10px)}.slider-container .slider-nav.nav--bottom-right .nav-btn--prev{bottom:30px;right:42px}.slider-container .slider-nav.nav--bottom-right .nav-btn--next{bottom:30px;right:-20px}.slider-container .slider-nav.nav--center-sides .nav-btn{background:rgba(0,0,0,.7);color:#fff}.slider-container .slider-nav.nav--center-sides .nav-btn--prev{top:50%;left:-50px;transform:translateY(-50%)}.slider-container .slider-nav.nav--center-sides .nav-btn--next{top:50%;right:-50px;transform:translateY(-50%)}@media(max-width: 1024px){.slider-container .slider-nav .nav--top-left .nav-btn--prev,.slider-container .slider-nav .nav--top-center .nav-btn--prev,.slider-container .slider-nav .nav--top-right .nav-btn--prev,.slider-container .slider-nav .nav--bottom-left .nav-btn--prev,.slider-container .slider-nav .nav--bottom-center .nav-btn--prev,.slider-container .slider-nav .nav--bottom-right .nav-btn--prev,.slider-container .slider-nav .nav--center-sides .nav-btn--prev{left:clamp(8px,5%,40px);right:auto}.slider-container .slider-nav .nav--top-left .nav-btn--next,.slider-container .slider-nav .nav--top-center .nav-btn--next,.slider-container .slider-nav .nav--top-right .nav-btn--next,.slider-container .slider-nav .nav--bottom-left .nav-btn--next,.slider-container .slider-nav .nav--bottom-center .nav-btn--next,.slider-container .slider-nav .nav--bottom-right .nav-btn--next,.slider-container .slider-nav .nav--center-sides .nav-btn--next{right:clamp(8px,5%,20px);left:auto}}@media(max-width: 768px){.slider-container .slider-nav .nav-btn{width:36px;height:36px;font-size:24px}}@media(max-width: 480px){.slider-container .slider-nav .slider-container .slider-nav.nav--center-sides{pointer-events:auto}.slider-container .slider-nav .slider-container .slider-nav.nav--center-sides .nav-btn{width:32px;height:32px;font-size:20px;pointer-events:auto;z-index:20;background:rgba(0,0,0,.7);color:#fff}.slider-container .slider-nav .slider-container .slider__wrapper{position:relative}.slider-container .slider-nav .slider-container .slider__wrapper .slide-content{pointer-events:auto}.slider-container .slider-nav .nav-btn{width:32px;height:32px;font-size:20px}.slider-container .slider-nav .nav-btn--prev{left:8px !important;right:auto !important}.slider-container .slider-nav .nav-btn--next{right:8px !important;left:auto !important}}/*# sourceMappingURL=ngx-simple-slider.min.css.map */
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["ngx-simple-slider.scss"],"names":[],"mappings":"AAMA,MACE,cACA,kBAIF,qBACE,oBACA,OAVY,MAad,aACE,WACA,aACA,uBACA,aAGF,yBACE,aACE,YACA,eAIJ,cACE,YACA,gBAEA,+BACE,aACA,sBAGA,sCACE,cAEA,mGAEE,kBACA,WACA,YACA,aACA,mBACA,uBAEA,6HACE,WACA,YACA,YACA,WACA,mBAGF,2GACE,eACA,gBACA,mBACA,cAEA,wBACA,wBACA,oBAQV,gBACE,gBACA,mBACA,uBAEA,iCACE,aACA,IAjFQ,IAmFR,sBACA,wBAGF,uBACE,cACA,oBAEA,sCACE,WACA,YAEA,aACA,mBACA,uBAEA,yBACA,eAEA,0CACE,eACA,gBACA,mBACA,cACA,qBAGF,qDACE,qBAOR,QACE,WACA,YACA,gBACA,kBACA,kBACA,YACA,iBACA,uBACA,0CAEA,wBACE,YAGF,2BACE,gBAGF,uBAEE,mCAGF,kCACE,oBAGF,yBACE,aACA,gEAEA,sBACA,eACA,WACA,YAIF,eACE,aACA,mBACA,uBACA,YACA,gBACA,cACA,kBACA,gEAIJ,0BACE,uBACE,cAIJ,0BACE,uBACE,kBAIJ,0BACE,uBACE,cAKJ,sCAEE,kBACA,QACA,2BACA,WACA,YACA,sDACA,eACA,WAEA,gDACE,WAGF,gDACE,UAKJ,gBACE,kBAGF,WACE,kBACA,QACA,2BACA,WACA,WACA,YAEA,+SAIA,eACA,iBAEA,UACA,oBACA,8BAEA,uBACE,UACA,mBAGF,iBACE,WACA,qDAGF,kBACE,YAKF,uCACE,aACA,mBACA,uBACA,QAEA,kDACE,qBACA,UACA,WACA,iBACA,kBACA,mBAEA,yDACE,mBACA,yBAGF,wDACE,mBACA,yBAGF,yDACE,UACA,oBAMR,kBACE,kBACA,WAEA,0BACE,kBACA,UAEF,6CACE,oBAEF,8BACE,kBACA,QACA,oBACA,WAEA,uCACE,oBACA,WAEA,kBAEA,WACA,YACA,kBACA,oBACA,mBACA,uBACA,SACA,eACA,yBACA,eACA,cACA,WACE,sCAGF,6CACE,2BACA,0BAGF,iDACE,oCACA,WACA,mBACA,oBAMF,2DACE,UACA,WAEF,2DACE,UACA,UAKF,6DACE,UACA,SACA,4BAEF,6DACE,UACA,SACA,2BAKF,4DACE,UACA,WAEF,4DACE,UACA,YAMF,8DACE,YACA,WAEF,8DACE,YACA,UAKF,gEACE,YACA,SACA,4BAEF,gEACE,YACA,SACA,2BAKF,+DACE,YACA,WAEF,+DACE,YACA,YAMF,yDACE,0BACA,WAEF,+DACE,QACA,WACA,2BAEF,+DACE,QACA,YACA,2BAKJ,0BASI,ubACE,wBACA,WAEF,ubACE,yBACA,WAKN,yBACE,uCACE,WACA,YACA,gBAIJ,yBAEI,8EACE,oBAEA,uFACE,WACA,YACA,eAEA,oBACA,WACA,0BACA,WAKJ,iEACE,kBAEA,gFACE,oBAIN,uCACE,WACA,YACA,eAIF,6CACE,oBACA,sBAEF,6CACE,qBACA","file":"ngx-simple-slider.min.css"}
1
+ {"version":3,"sourceRoot":"","sources":["ngx-simple-slider.scss"],"names":[],"mappings":"AAMA,MACE,cACA,kBAIF,qBACE,oBACA,OAVY,MAad,aACE,WACA,aACA,uBACA,aAGF,yBACE,aACE,YACA,eAIJ,cACE,YACA,gBAEA,+BACE,aACA,sBAGA,sCACE,cAEA,mGAEE,kBACA,WACA,YACA,aACA,mBACA,uBAEA,6HACE,WACA,YACA,YACA,WACA,mBAGF,2GACE,eACA,gBACA,mBACA,cAEA,wBACA,wBACA,oBAQV,gBACE,gBACA,mBACA,uBAEA,iCACE,aACA,IAjFQ,IAmFR,sBACA,wBAGF,uBACE,cACA,oBAEA,sCACE,WACA,YAEA,aACA,mBACA,uBAEA,yBACA,eAEA,0CACE,eACA,gBACA,mBACA,cACA,qBAGF,qDACE,qBAOR,QACE,WACA,YACA,gBACA,kBACA,mBAEA,YACA,iBACA,uBACA,0CAEA,wBACE,YACA,kBAGF,2BACE,gBAGF,uBAEE,mCAGF,kCACE,oBAGF,yBACE,aACA,gEAEA,sBACA,eACA,WACA,YAIF,eACE,aACA,mBACA,uBACA,YACA,gBACA,cACA,kBACA,gEAIJ,0BACE,uBACE,cAIJ,0BACE,uBACE,kBAIJ,0BACE,uBACE,cAKJ,sCAEE,kBACA,QACA,2BACA,WACA,YACA,sDACA,eACA,WAEA,gDACE,WAGF,gDACE,UAKJ,gBACE,kBAGF,WACE,kBACA,QACA,2BACA,WACA,WACA,YAEA,+SAIA,eACA,iBAEA,UACA,oBACA,8BAEA,uBACE,UACA,mBAGF,iBACE,WACA,qDAGF,kBACE,YAKF,uCACE,aACA,mBACA,uBACA,QAEA,kDACE,qBACA,UACA,WACA,iBACA,kBACA,mBAEA,yDACE,mBACA,yBAGF,wDACE,mBACA,yBAGF,yDACE,UACA,oBAMR,kBACE,kBACA,UAEA,0BACE,kBACA,UAEF,6CACE,oBAEF,8BACE,kBACA,QACA,oBACA,WAEA,uCACE,oBACA,WAEA,kBAEA,WACA,YACA,kBACA,oBACA,mBACA,uBACA,SACA,eACA,yBACA,eACA,cACA,WACE,sCAGF,6CACE,2BACA,0BAGF,iDACE,oCACA,WACA,mBACA,oBAMF,2DACE,UACA,WAEF,2DACE,UACA,UAKF,6DACE,UACA,SACA,4BAEF,6DACE,UACA,SACA,2BAKF,4DACE,UACA,WAEF,4DACE,UACA,YAMF,8DACE,YACA,WAEF,8DACE,YACA,UAKF,gEACE,YACA,SACA,4BAEF,gEACE,YACA,SACA,2BAKF,+DACE,YACA,WAEF,+DACE,YACA,YAMF,yDACE,0BACA,WAEF,+DACE,QACA,WACA,2BAEF,+DACE,QACA,YACA,2BAKJ,0BASI,ubACE,wBACA,WAEF,ubACE,yBACA,WAKN,yBACE,uCACE,WACA,YACA,gBAIJ,yBAEI,8EACE,oBAEA,uFACE,WACA,YACA,eAEA,oBACA,WACA,0BACA,WAKJ,iEACE,kBAEA,gFACE,oBAIN,uCACE,WACA,YACA,eAIF,6CACE,oBACA,sBAEF,6CACE,qBACA","file":"ngx-simple-slider.min.css"}
@@ -123,7 +123,8 @@ $main-height: 520px; // main slider height
123
123
  height: 100%;
124
124
  overflow: hidden;
125
125
  position: relative;
126
- touch-action: none; // 🔥 slider owns the gesture
126
+ touch-action: pan-y; // allow vertical scroll by default
127
+
127
128
  cursor: grab;
128
129
  user-select: none;
129
130
  -webkit-user-drag: none;
@@ -131,6 +132,7 @@ $main-height: 520px; // main slider height
131
132
 
132
133
  &.slider-can-drag {
133
134
  cursor: grab;
135
+ touch-action: none; // ← only block all touch when draggable and has slides
134
136
  }
135
137
 
136
138
  &.slider-is-dragging {
@@ -282,7 +284,7 @@ $main-height: 520px; // main slider height
282
284
 
283
285
  .slider-container {
284
286
  position: relative;
285
- z-index: 10; // base container
287
+ z-index: 2; // base container
286
288
 
287
289
  .slider {
288
290
  position: relative;
@@ -2,11 +2,11 @@ import { Component, ChangeDetectionStrategy, Input, EventEmitter, Output, ViewCh
2
2
  import { Subject, takeUntil } from "rxjs";
3
3
  import { SliderEngine } from "../engine/slider-engine.service";
4
4
  import { SliderStore } from "../store/slider-store.service";
5
- import { SliderAutoplayPlugin } from "../plugins/autoplay/autoplay.plugin";
6
5
  import { SliderDraggablePlugin } from "../plugins/draggable/draggable.plugin";
7
6
  import { SliderNavigationPlugin } from "../plugins/navigation/navigation.plugin";
8
7
  import { SliderPaginationPlugin } from "../plugins/pagination/pagination.plugin";
9
8
  import { CommonModule } from "@angular/common";
9
+ import { SliderAutoplayPlugin } from "../plugins/autoplay/autoplay.plugin";
10
10
  import * as i0 from "@angular/core";
11
11
  import * as i1 from "../engine/slider-engine.service";
12
12
  import * as i2 from "../store/slider-store.service";
@@ -27,6 +27,7 @@ export class SimpleSliderComponent {
27
27
  navigationTemplate;
28
28
  paginationTemplate;
29
29
  slideChange = new EventEmitter();
30
+ initialized = false;
30
31
  isDraggingPointer = false;
31
32
  dragStartX = 0;
32
33
  dragStartY = 0;
@@ -53,6 +54,7 @@ export class SimpleSliderComponent {
53
54
  });
54
55
  this.lastSlidesRef = this.config?.slides ?? null;
55
56
  this.resolvePlugins(this.config);
57
+ this.initialized = true; // ← mark after first resolvePlugins
56
58
  }
57
59
  ngAfterViewInit() {
58
60
  if (this.sliderHost?.nativeElement) {
@@ -62,6 +64,8 @@ export class SimpleSliderComponent {
62
64
  ngOnChanges(changes) {
63
65
  if (!changes["config"] || !this.config)
64
66
  return;
67
+ if (!this.initialized)
68
+ return; // ← skip the pre-ngOnInit call; ngOnInit handles it
65
69
  const newSlidesRef = this.config.slides ?? null;
66
70
  if (newSlidesRef !== this.lastSlidesRef) {
67
71
  this.lastSlidesRef = newSlidesRef;
@@ -183,21 +187,23 @@ export class SimpleSliderComponent {
183
187
  runtimePlugins.push(this.pagination);
184
188
  if (cfg.navigation)
185
189
  runtimePlugins.push(this.navigation);
190
+ if (cfg.autoplay)
191
+ runtimePlugins.push(this.autoplay); // ← add BEFORE init, no setConfig yet
192
+ this.engine.init({ ...config, plugins: undefined }, runtimePlugins);
193
+ // ← call setConfig AFTER engine.init so this.engine is set inside the plugin
186
194
  if (cfg.autoplay) {
187
195
  this.autoplay.setConfig(cfg.autoplay);
188
- runtimePlugins.push(this.autoplay);
189
196
  }
190
- this.engine.init({ ...config, plugins: undefined }, runtimePlugins);
191
197
  if (cfg.navigation) {
192
198
  setTimeout(() => this.navigation?.updateArrows?.());
193
199
  }
194
200
  }
195
201
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SimpleSliderComponent, deps: [{ token: i1.SliderEngine }, { token: i2.SliderStore }, { token: i3.SliderDraggablePlugin }, { token: i4.SliderPaginationPlugin }, { token: i5.SliderNavigationPlugin }, { token: i6.SliderAutoplayPlugin }], target: i0.ɵɵFactoryTarget.Component });
196
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SimpleSliderComponent, isStandalone: true, selector: "app-simple-slider", inputs: { config: "config", slideTemplate: "slideTemplate", navigationTemplate: "navigationTemplate", paginationTemplate: "paginationTemplate" }, outputs: { slideChange: "slideChange" }, providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin], viewQueries: [{ propertyName: "sliderHost", first: true, predicate: ["sliderHost"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: draggable.isDraggingPointer ? 'none' : 'transform 0.3s ease',\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
202
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SimpleSliderComponent, isStandalone: true, selector: "app-simple-slider", inputs: { config: "config", slideTemplate: "slideTemplate", navigationTemplate: "navigationTemplate", paginationTemplate: "paginationTemplate" }, outputs: { slideChange: "slideChange" }, providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin], viewQueries: [{ propertyName: "sliderHost", first: true, predicate: ["sliderHost"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: state.isDragging || state.silentJump ? 'none' : 'transform 0.5s cubic-bezier(0.4, 0.0, 0.2, 1)',\r\n\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
197
203
  }
198
204
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SimpleSliderComponent, decorators: [{
199
205
  type: Component,
200
- args: [{ selector: "app-simple-slider", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule], providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin], template: "<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: draggable.isDraggingPointer ? 'none' : 'transform 0.3s ease',\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n" }]
206
+ args: [{ selector: "app-simple-slider", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule], providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin], template: "<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: state.isDragging || state.silentJump ? 'none' : 'transform 0.5s cubic-bezier(0.4, 0.0, 0.2, 1)',\r\n\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n" }]
201
207
  }], ctorParameters: () => [{ type: i1.SliderEngine }, { type: i2.SliderStore }, { type: i3.SliderDraggablePlugin }, { type: i4.SliderPaginationPlugin }, { type: i5.SliderNavigationPlugin }, { type: i6.SliderAutoplayPlugin }], propDecorators: { config: [{
202
208
  type: Input
203
209
  }], slideTemplate: [{
@@ -212,4 +218,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
212
218
  type: ViewChild,
213
219
  args: ["sliderHost", { static: false }]
214
220
  }] } });
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXNsaWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRnZS1zbGlkZXIvc3JjL2xpYi9jb21wb25lbnQvc2ltcGxlLXNsaWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRnZS1zbGlkZXIvc3JjL2xpYi9jb21wb25lbnQvc2ltcGxlLXNsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUd2QixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFJTixTQUFTLEVBR1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7QUFZL0MsTUFBTSxPQUFPLHFCQUFxQjtJQWtCdEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBdEJELE1BQU0sQ0FBZ0I7SUFDdEIsYUFBYSxDQUFvQjtJQUNqQyxrQkFBa0IsQ0FBb0I7SUFDdEMsa0JBQWtCLENBQW9CO0lBQ3JDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRTNDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUMxQixVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNmLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNmLGFBQWEsR0FBaUIsSUFBSSxDQUFDO0lBQ25DLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXZDLE1BQU0sQ0FBK0I7SUFDTyxVQUFVLENBQTJCO0lBRWpGLFlBQ1UsTUFBb0IsRUFDcEIsS0FBa0IsRUFDbEIsU0FBZ0MsRUFDaEMsVUFBa0MsRUFDbEMsVUFBa0MsRUFDbEMsUUFBOEI7UUFMOUIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQixVQUFLLEdBQUwsS0FBSyxDQUFhO1FBQ2xCLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBQ2hDLGVBQVUsR0FBVixVQUFVLENBQXdCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQXdCO1FBQ2xDLGFBQVEsR0FBUixRQUFRLENBQXNCO0lBQ3JDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUUvQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDN0QsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUM7UUFDakQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRS9DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztRQUVoRCxJQUFJLFlBQVksS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVNLElBQUksQ0FBQyxLQUFhO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1FBQ2hELCtCQUErQjtJQUNqQyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUMsQ0FBQyxvQ0FBb0M7SUFFdEMsTUFBTTtRQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxXQUFXLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsYUFBYTtRQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUNELGFBQWE7SUFDYiwyQ0FBMkM7SUFDM0MsSUFBSSxRQUFRO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDbEQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDbEQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBRUQsK0JBQStCO0lBQ3hCLElBQUk7UUFDVCxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxJQUFJO1FBQ1QsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLElBQUksTUFBTTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1lBQ2xFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVELGdDQUFnQztJQUN6QixTQUFTLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsa0JBQWtCO0lBRWxCLGFBQWEsQ0FBQyxLQUFtQjtRQUMvQiwrQ0FBK0M7UUFDL0MsSUFBSyxLQUFLLENBQUMsTUFBc0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN0RCxPQUFPLENBQUMsU0FBUztRQUNuQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRS9CLDREQUE0RDtRQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQW1CO1FBQy9CLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBRTlCLDBFQUEwRTtZQUN6RSxLQUFLLENBQUMsYUFBNkIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBbUI7UUFDN0IsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRW5CLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM1QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztZQUUzQyxnRUFBZ0U7WUFDaEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QyxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDekQsSUFBSSxLQUFLLEtBQUssSUFBSTtvQkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUvQiw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDO1lBQ0YsS0FBSyxDQUFDLGFBQTZCLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQSxDQUFDO0lBQ1osQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFvQjtRQUN6QyxNQUFNLGNBQWMsR0FBbUIsRUFBRSxDQUFDO1FBRTFDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsb0JBQW9CO1FBRXRELElBQUksR0FBRyxDQUFDLFNBQVM7WUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RCxJQUFJLEdBQUcsQ0FBQyxVQUFVO1lBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekQsSUFBSSxHQUFHLENBQUMsVUFBVTtZQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpELElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFcEUsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO3dHQXJNVSxxQkFBcUI7NEZBQXJCLHFCQUFxQiwyUEFGckIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixDQUFDLHlKQ3BDckkseThEQThDQSx5RERYWSxZQUFZOzs0RkFHWCxxQkFBcUI7a0JBVmpDLFNBQVM7K0JBQ0UsbUJBQW1CLG1CQUdaLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksY0FDekIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLGFBQ1osQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixDQUFDOzRQQUcxSCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBVXFDLFVBQVU7c0JBQXJELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIE9uSW5pdCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBJbnB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNsaWRlclZpZXdTdGF0ZSB9IGZyb20gXCIuLi9tb2RlbHMvc2xpZGVyLXN0YXRlLm1vZGVsXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFNsaWRlckNvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvc2xpZGVyLWNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBTbGlkZXJFbmdpbmUgfSBmcm9tIFwiLi4vZW5naW5lL3NsaWRlci1lbmdpbmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTbGlkZXJTdG9yZSB9IGZyb20gXCIuLi9zdG9yZS9zbGlkZXItc3RvcmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTbGlkZXJBdXRvcGxheVBsdWdpbiB9IGZyb20gXCIuLi9wbHVnaW5zL2F1dG9wbGF5L2F1dG9wbGF5LnBsdWdpblwiO1xyXG5pbXBvcnQgeyBTbGlkZXJEcmFnZ2FibGVQbHVnaW4gfSBmcm9tIFwiLi4vcGx1Z2lucy9kcmFnZ2FibGUvZHJhZ2dhYmxlLnBsdWdpblwiO1xyXG5pbXBvcnQgeyBTbGlkZXJOYXZpZ2F0aW9uUGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnBsdWdpblwiO1xyXG5pbXBvcnQgeyBTbGlkZXJQYWdpbmF0aW9uUGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLnBsdWdpblwiO1xyXG5pbXBvcnQgeyBQYWdlciwgU2xpZGVyUGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvc2xpZGVyLXBsdWdpblwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtc2ltcGxlLXNsaWRlclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vc2ltcGxlLXNsaWRlci5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vc2ltcGxlLXNsaWRlci5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcclxuICBwcm92aWRlcnM6IFtTbGlkZXJFbmdpbmUsIFNsaWRlclN0b3JlLCBTbGlkZXJEcmFnZ2FibGVQbHVnaW4sIFNsaWRlclBhZ2luYXRpb25QbHVnaW4sIFNsaWRlck5hdmlnYXRpb25QbHVnaW4sIFNsaWRlckF1dG9wbGF5UGx1Z2luXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNpbXBsZVNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFNsaWRlckNvbmZpZztcclxuICBASW5wdXQoKSBzbGlkZVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBuYXZpZ2F0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQE91dHB1dCgpIHNsaWRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIHByaXZhdGUgaXNEcmFnZ2luZ1BvaW50ZXIgPSBmYWxzZTtcclxuICBwcml2YXRlIGRyYWdTdGFydFggPSAwO1xyXG4gIHByaXZhdGUgZHJhZ1N0YXJ0WSA9IDA7XHJcbiAgcHJpdmF0ZSBsYXN0SW5kZXggPSAtMTtcclxuICBwcml2YXRlIGxhc3RTbGlkZXNSZWY6IGFueVtdIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHN0YXRlJCE6IE9ic2VydmFibGU8U2xpZGVyVmlld1N0YXRlPjtcclxuICBAVmlld0NoaWxkKFwic2xpZGVySG9zdFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgc2xpZGVySG9zdD86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZW5naW5lOiBTbGlkZXJFbmdpbmUsXHJcbiAgICBwcml2YXRlIHN0b3JlOiBTbGlkZXJTdG9yZSxcclxuICAgIHByaXZhdGUgZHJhZ2dhYmxlOiBTbGlkZXJEcmFnZ2FibGVQbHVnaW4sXHJcbiAgICBwcml2YXRlIHBhZ2luYXRpb246IFNsaWRlclBhZ2luYXRpb25QbHVnaW4sXHJcbiAgICBwcml2YXRlIG5hdmlnYXRpb246IFNsaWRlck5hdmlnYXRpb25QbHVnaW4sXHJcbiAgICBwcml2YXRlIGF1dG9wbGF5OiBTbGlkZXJBdXRvcGxheVBsdWdpbixcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zdGF0ZSQgPSB0aGlzLnN0b3JlLnZpZXckO1xyXG5cclxuICAgIHRoaXMuc3RhdGUkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XHJcbiAgICAgIGlmIChzdGF0ZS5jdXJyZW50U2xpZGUgIT09IHRoaXMubGFzdEluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5sYXN0SW5kZXggPSBzdGF0ZS5jdXJyZW50U2xpZGU7XHJcbiAgICAgICAgdGhpcy5zbGlkZUNoYW5nZS5lbWl0KHN0YXRlLmN1cnJlbnRTbGlkZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5sYXN0U2xpZGVzUmVmID0gdGhpcy5jb25maWc/LnNsaWRlcyA/PyBudWxsO1xyXG4gICAgdGhpcy5yZXNvbHZlUGx1Z2lucyh0aGlzLmNvbmZpZyk7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLnNsaWRlckhvc3Q/Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5lbmdpbmUuYXR0YWNoQ29udGFpbmVyKHRoaXMuc2xpZGVySG9zdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmICghY2hhbmdlc1tcImNvbmZpZ1wiXSB8fCAhdGhpcy5jb25maWcpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBuZXdTbGlkZXNSZWYgPSB0aGlzLmNvbmZpZy5zbGlkZXMgPz8gbnVsbDtcclxuXHJcbiAgICBpZiAobmV3U2xpZGVzUmVmICE9PSB0aGlzLmxhc3RTbGlkZXNSZWYpIHtcclxuICAgICAgdGhpcy5sYXN0U2xpZGVzUmVmID0gbmV3U2xpZGVzUmVmO1xyXG4gICAgICB0aGlzLmVuZ2luZS5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMucmVzb2x2ZVBsdWdpbnModGhpcy5jb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZGVzdHJveVNsaWRlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvVG8oaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5lbmdpbmUuc2VsZWN0U2xpZGUoaW5kZXgpOyAvLyBhZGQgdGhpcyBsaW5lXHJcbiAgICAvL3RoaXMuc2xpZGVDaGFuZ2UuZW1pdChpbmRleCk7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95U2xpZGVyKCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLmVuZ2luZS5kZXN0cm95KCk7XHJcbiAgfSAvLyBkZXN0cm95cyBwbHVnaW5zIGFuZCBjbGVhcnMgc3RvcmVcclxuXHJcbiAgb25OZXh0KCkge1xyXG4gICAgdGhpcy5lbmdpbmUubmV4dCgpO1xyXG4gIH1cclxuICBvblByZXZpb3VzKCkge1xyXG4gICAgdGhpcy5lbmdpbmUucHJldmlvdXMoKTtcclxuICB9XHJcbiAgc2VsZWN0U2xpZGUoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5lbmdpbmUuc2VsZWN0U2xpZGUoaW5kZXgpO1xyXG4gIH1cclxuICBvblJlY2FsY3VsYXRlKCkge1xyXG4gICAgdGhpcy5lbmdpbmUucmVjYWxjdWxhdGUoKTtcclxuICB9XHJcbiAgLy8gTmF2aWdhdGlvblxyXG4gIC8qKiBFeHBvc2UgbmF2aWdhdGlvbiBvYnNlcnZhYmxlcyBzYWZlbHkgKi9cclxuICBnZXQgY2FuUHJldiQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLm5hdmlnYXRpb24pIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiTmF2aWdhdGlvbiBwbHVnaW4gaXMgbm90IGVuYWJsZWQuXCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb24uY2FuUHJldiQ7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FuTmV4dCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLm5hdmlnYXRpb24pIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiTmF2aWdhdGlvbiBwbHVnaW4gaXMgbm90IGVuYWJsZWQuXCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb24uY2FuTmV4dCQ7XHJcbiAgfVxyXG5cclxuICAvKiogRXhwb3NlIG5leHQvcHJldiBtZXRob2RzICovXHJcbiAgcHVibGljIG5leHQoKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb24/Lm5leHQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmV2KCkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uPy5wcmV2KCk7XHJcbiAgfVxyXG5cclxuICAvKiogRXhwb3NlIHBhZ2luYXRpb24gb2JzZXJ2YWJsZSAqL1xyXG4gIGdldCBwYWdlciQoKTogT2JzZXJ2YWJsZTxQYWdlciB8IG51bGw+IHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMucGFnaW5hdGlvbikge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJQYWdpbmF0aW9uIHBsdWdpbiBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBzbGlkZXIuXCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb24ucGFnZXIkO1xyXG4gIH1cclxuXHJcbiAgLyoqIEV4cG9zZSBhIGdvVG9TbGlkZSBtZXRob2QgKi9cclxuICBwdWJsaWMgZ29Ub1NsaWRlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMucGFnaW5hdGlvbi5nb1RvU2xpZGUoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIFBvaW50ZXJzXHJcblxyXG4gIG9uUG9pbnRlckRvd24oZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xyXG4gICAgLy8gT25seSBzdGFydCBkcmFnIGlmIG5vdCBjbGlja2luZyBhIG5hdiBidXR0b25cclxuICAgIGlmICgoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFwiLm5hdi1idG5cIikpIHtcclxuICAgICAgcmV0dXJuOyAvLyBpZ25vcmVcclxuICAgIH1cclxuICAgIHRoaXMuZHJhZ1N0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICB0aGlzLmRyYWdTdGFydFkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgdGhpcy5pc0RyYWdnaW5nUG9pbnRlciA9IGZhbHNlO1xyXG5cclxuICAgIC8vIERvIG5vdCBjYXB0dXJlIHlldDsgd2FpdCB1bnRpbCBtb3ZlbWVudCBleGNlZWRzIHRocmVzaG9sZFxyXG4gICAgdGhpcy5lbmdpbmUuaGFuZGxlRHJhZ1N0YXJ0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uUG9pbnRlck1vdmUoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xyXG4gICAgY29uc3QgZHggPSBNYXRoLmFicyhldmVudC5jbGllbnRYIC0gdGhpcy5kcmFnU3RhcnRYKTtcclxuICAgIGNvbnN0IGR5ID0gTWF0aC5hYnMoZXZlbnQuY2xpZW50WSAtIHRoaXMuZHJhZ1N0YXJ0WSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmdQb2ludGVyICYmIChkeCA+IDUgfHwgZHkgPiA1KSkge1xyXG4gICAgICB0aGlzLmlzRHJhZ2dpbmdQb2ludGVyID0gdHJ1ZTtcclxuXHJcbiAgICAgIC8vIE5vdyBzdGFydCBjYXB0dXJpbmcgcG9pbnRlciBzbyBkcmFnZ2luZyB3b3JrcyBvdXRzaWRlIHRoZSBzbGlkZXIgYm91bmRzXHJcbiAgICAgIChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRHJhZ2dpbmdQb2ludGVyKSB7XHJcbiAgICAgIHRoaXMuZW5naW5lLmhhbmRsZURyYWdNb3ZlKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUG9pbnRlclVwKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIGlmICghZXZlbnQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZ1BvaW50ZXIpIHtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgLy8gT25seSBzZWxlY3QgdGhlIHNsaWRlIGlmIGNsaWNrIGlzIG5vdCBvbiBhbiBpbnRlcmFjdGl2ZSBjaGlsZFxyXG4gICAgICBjb25zdCBzbGlkZUVsID0gdGFyZ2V0LmNsb3Nlc3QoXCIuc2xpZGVcIik7XHJcbiAgICAgIGlmIChzbGlkZUVsICYmICF0YXJnZXQuY2xvc2VzdChcImJ1dHRvbiwgdmlkZW8sIGFcIikpIHtcclxuICAgICAgICBjb25zdCBpbmRleEF0dHIgPSBzbGlkZUVsLmdldEF0dHJpYnV0ZShcImRhdGEtaW5kZXhcIik7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbmRleEF0dHIgPyBwYXJzZUludChpbmRleEF0dHIsIDEwKSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsKSB0aGlzLmVuZ2luZS5zZWxlY3RTbGlkZShpbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVuZ2luZS5oYW5kbGVEcmFnRW5kKCk7XHJcbiAgICB0aGlzLmlzRHJhZ2dpbmdQb2ludGVyID0gZmFsc2U7XHJcblxyXG4gICAgLy8gUmVsZWFzZSBwb2ludGVyIGNhcHR1cmUgaWYgaXQgd2FzIGNhcHR1cmVkXHJcbiAgICB0cnkge1xyXG4gICAgICAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XHJcbiAgICB9IGNhdGNoIHt9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc29sdmVQbHVnaW5zKGNvbmZpZzogU2xpZGVyQ29uZmlnKSB7XHJcbiAgICBjb25zdCBydW50aW1lUGx1Z2luczogU2xpZGVyUGx1Z2luW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBjZmcgPSBjb25maWcucGx1Z2lucyA/PyB7fTsgLy8gPC0tIHNhZmUgZmFsbGJhY2tcclxuXHJcbiAgICBpZiAoY2ZnLmRyYWdnYWJsZSkgcnVudGltZVBsdWdpbnMucHVzaCh0aGlzLmRyYWdnYWJsZSk7XHJcbiAgICBpZiAoY2ZnLnBhZ2luYXRpb24pIHJ1bnRpbWVQbHVnaW5zLnB1c2godGhpcy5wYWdpbmF0aW9uKTtcclxuICAgIGlmIChjZmcubmF2aWdhdGlvbikgcnVudGltZVBsdWdpbnMucHVzaCh0aGlzLm5hdmlnYXRpb24pO1xyXG5cclxuICAgIGlmIChjZmcuYXV0b3BsYXkpIHtcclxuICAgICAgdGhpcy5hdXRvcGxheS5zZXRDb25maWcoY2ZnLmF1dG9wbGF5KTtcclxuICAgICAgcnVudGltZVBsdWdpbnMucHVzaCh0aGlzLmF1dG9wbGF5KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVuZ2luZS5pbml0KHsgLi4uY29uZmlnLCBwbHVnaW5zOiB1bmRlZmluZWQgfSwgcnVudGltZVBsdWdpbnMpO1xyXG5cclxuICAgIGlmIChjZmcubmF2aWdhdGlvbikge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2aWdhdGlvbj8udXBkYXRlQXJyb3dzPy4oKSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSQgfCBhc3luYyBhcyBzdGF0ZVwiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwic2xpZGVyXCJcclxuICAgICNzbGlkZXJIb3N0XHJcbiAgICBbY2xhc3Muc2xpZGVyLXZlcnRpY2FsXT1cInN0YXRlLnZlcnRpY2FsXCJcclxuICAgIFtjbGFzcy5zbGlkZXItZHJhZ2dhYmxlXT1cInN0YXRlLmlzRHJhZ2dpbmdcIlxyXG4gICAgW2NsYXNzLnNsaWRlci0tbWFpbl09XCIhY29uZmlnLmlzVGh1bWJzXCJcclxuICAgIFtjbGFzcy5zbGlkZXItLXRodW1ic109XCJjb25maWcuaXNUaHVtYnNcIlxyXG4gICAgKm5nSWY9XCJzdGF0ZS52aXNpYmxlU2xpZGVzPy5sZW5ndGggPiAwICYmIHN0YXRlLmlzVmlzaWJsZVwiXHJcbiAgICAocG9pbnRlcmRvd24pPVwib25Qb2ludGVyRG93bigkZXZlbnQpXCJcclxuICAgIChwb2ludGVybW92ZSk9XCJvblBvaW50ZXJNb3ZlKCRldmVudClcIlxyXG4gICAgKHBvaW50ZXJ1cCk9XCJvblBvaW50ZXJVcCgkZXZlbnQpXCJcclxuICAgIChwb2ludGVyY2FuY2VsKT1cIm9uUG9pbnRlclVwKCRldmVudClcIj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJzbGlkZXJfX3dyYXBwZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgdHJhbnNmb3JtOiBzdGF0ZS50cmFuc2xhdGUsXHJcbiAgICAgICAgdHJhbnNpdGlvbjogZHJhZ2dhYmxlLmlzRHJhZ2dpbmdQb2ludGVyID8gJ25vbmUnIDogJ3RyYW5zZm9ybSAwLjNzIGVhc2UnLFxyXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAnZmxleC1kaXJlY3Rpb24nOiBzdGF0ZS52ZXJ0aWNhbCA/ICdjb2x1bW4nIDogJ3JvdycsXHJcbiAgICAgICAgJ2p1c3RpZnktY29udGVudCc6IHN0YXRlLnZpc2libGVTbGlkZXM/Lmxlbmd0aCA8IHN0YXRlLnNsaWRlc1BlclZpZXcgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0JyxcclxuICAgICAgICBnYXA6IChzdGF0ZS5zbGlkZXNQZXJWaWV3ID4gMSA/IHN0YXRlLmdhcCB8fCAwIDogMCkgKyAncHgnLFxyXG4gICAgICB9XCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdGb3I9XCJsZXQgc2xpZGUgb2Ygc3RhdGUudmlzaWJsZVNsaWRlczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgY2xhc3M9XCJzbGlkZVwiXHJcbiAgICAgICAgW2F0dHIuZGF0YS1pbmRleF09XCJpXCJcclxuICAgICAgICBbY2xhc3Muc2xpZGUtLWN1cnJlbnRdPVwic3RhdGUuc2VsZWN0ZWRTbGlkZSA9PT0gaVwiXHJcbiAgICAgICAgW3N0eWxlLmZsZXhdPVwiXHJcbiAgICAgICAgICAhY29uZmlnLmlzVGh1bWJzXHJcbiAgICAgICAgICAgID8gJzAgMCBjYWxjKCcgK1xyXG4gICAgICAgICAgICAgIDEwMCAvIHN0YXRlLnNsaWRlc1BlclZpZXcgK1xyXG4gICAgICAgICAgICAgICclIC0gJyArXHJcbiAgICAgICAgICAgICAgKChzdGF0ZS5nYXAgfHwgMCkgKiAoc3RhdGUuc2xpZGVzUGVyVmlldyAtIDEpKSAvIHN0YXRlLnNsaWRlc1BlclZpZXcgK1xyXG4gICAgICAgICAgICAgICdweCknXHJcbiAgICAgICAgICAgIDogJzAgMCAnICsgdGh1bWJTaXplICsgJ3B4J1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbmZpZy5pc1RodW1icyA/IHRodW1iU2l6ZSArICdweCcgOiBudWxsXCJcclxuICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImNvbmZpZy5pc1RodW1icyA/IHRodW1iU2l6ZSArICdweCcgOiBudWxsXCJcclxuICAgICAgICAoY2xpY2spPVwiZW5naW5lLnNlbGVjdFNsaWRlKGkpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzbGlkZVRlbXBsYXRlID8gc2xpZGVUZW1wbGF0ZSA6IGRlZmF1bHRTbGlkZVRlbXBsYXRlOyBjb250ZXh0OiB7IHNsaWRlOiBzbGlkZSwgaW5kZXg6IGkgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXNsaWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRnZS1zbGlkZXIvc3JjL2xpYi9jb21wb25lbnQvc2ltcGxlLXNsaWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRnZS1zbGlkZXIvc3JjL2xpYi9jb21wb25lbnQvc2ltcGxlLXNsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUd2QixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFJTixTQUFTLEVBR1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7QUFZM0UsTUFBTSxPQUFPLHFCQUFxQjtJQW1CdEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBdkJELE1BQU0sQ0FBZ0I7SUFDdEIsYUFBYSxDQUFvQjtJQUNqQyxrQkFBa0IsQ0FBb0I7SUFDdEMsa0JBQWtCLENBQW9CO0lBQ3JDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRTNDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDcEIsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQzFCLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDZixVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2YsYUFBYSxHQUFpQixJQUFJLENBQUM7SUFDbkMsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFdkMsTUFBTSxDQUErQjtJQUNPLFVBQVUsQ0FBMkI7SUFFakYsWUFDVSxNQUFvQixFQUNwQixLQUFrQixFQUNsQixTQUFnQyxFQUNoQyxVQUFrQyxFQUNsQyxVQUFrQyxFQUNsQyxRQUE4QjtRQUw5QixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLFVBQUssR0FBTCxLQUFLLENBQWE7UUFDbEIsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFDaEMsZUFBVSxHQUFWLFVBQVUsQ0FBd0I7UUFDbEMsZUFBVSxHQUFWLFVBQVUsQ0FBd0I7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBc0I7SUFDckMsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBRS9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM3RCxJQUFJLEtBQUssQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQztRQUNqRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLG9DQUFvQztJQUMvRCxDQUFDO0lBQ0QsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxDQUFDLG9EQUFvRDtRQUVuRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7UUFFaEQsSUFBSSxZQUFZLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxJQUFJLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtRQUNoRCwrQkFBK0I7SUFDakMsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDLENBQUMsb0NBQW9DO0lBRXRDLE1BQU07UUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQWE7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELGFBQWE7UUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxhQUFhO0lBQ2IsMkNBQTJDO0lBQzNDLElBQUksUUFBUTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELCtCQUErQjtJQUN4QixJQUFJO1FBQ1QsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxJQUFJLE1BQU07UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsbURBQW1ELENBQUMsQ0FBQztZQUNsRSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxnQ0FBZ0M7SUFDekIsU0FBUyxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGtCQUFrQjtJQUVsQixhQUFhLENBQUMsS0FBbUI7UUFDL0IsK0NBQStDO1FBQy9DLElBQUssS0FBSyxDQUFDLE1BQXNCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdEQsT0FBTyxDQUFDLFNBQVM7UUFDbkIsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUvQiw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFtQjtRQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFckQsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUU5QiwwRUFBMEU7WUFDekUsS0FBSyxDQUFDLGFBQTZCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQW1CO1FBQzdCLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUVuQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDNUIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7WUFFM0MsZ0VBQWdFO1lBQ2hFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekMsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDckQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pELElBQUksS0FBSyxLQUFLLElBQUk7b0JBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFL0IsNkNBQTZDO1FBQzdDLElBQUksQ0FBQztZQUNGLEtBQUssQ0FBQyxhQUE2QixDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUEsQ0FBQztJQUNaLENBQUM7SUFFTyxjQUFjLENBQUMsTUFBb0I7UUFDekMsTUFBTSxjQUFjLEdBQW1CLEVBQUUsQ0FBQztRQUUxQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQjtRQUV0RCxJQUFJLEdBQUcsQ0FBQyxTQUFTO1lBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsSUFBSSxHQUFHLENBQUMsVUFBVTtZQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELElBQUksR0FBRyxDQUFDLFVBQVU7WUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6RCxJQUFJLEdBQUcsQ0FBQyxRQUFRO1lBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxzQ0FBc0M7UUFFNUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFcEUsNkVBQTZFO1FBQzdFLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO3dHQXhNVSxxQkFBcUI7NEZBQXJCLHFCQUFxQiwyUEFGckIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixDQUFDLHlKQ3BDckksZy9EQStDQSx5RERaWSxZQUFZOzs0RkFHWCxxQkFBcUI7a0JBVmpDLFNBQVM7K0JBQ0UsbUJBQW1CLG1CQUdaLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksY0FDekIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLGFBQ1osQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixDQUFDOzRQQUcxSCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBV3FDLFVBQVU7c0JBQXJELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIE9uSW5pdCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBJbnB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNsaWRlclZpZXdTdGF0ZSB9IGZyb20gXCIuLi9tb2RlbHMvc2xpZGVyLXN0YXRlLm1vZGVsXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFNsaWRlckNvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvc2xpZGVyLWNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBTbGlkZXJFbmdpbmUgfSBmcm9tIFwiLi4vZW5naW5lL3NsaWRlci1lbmdpbmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTbGlkZXJTdG9yZSB9IGZyb20gXCIuLi9zdG9yZS9zbGlkZXItc3RvcmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTbGlkZXJEcmFnZ2FibGVQbHVnaW4gfSBmcm9tIFwiLi4vcGx1Z2lucy9kcmFnZ2FibGUvZHJhZ2dhYmxlLnBsdWdpblwiO1xyXG5pbXBvcnQgeyBTbGlkZXJOYXZpZ2F0aW9uUGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnBsdWdpblwiO1xyXG5pbXBvcnQgeyBTbGlkZXJQYWdpbmF0aW9uUGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLnBsdWdpblwiO1xyXG5pbXBvcnQgeyBQYWdlciwgU2xpZGVyUGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvc2xpZGVyLXBsdWdpblwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IFNsaWRlckF1dG9wbGF5UGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvYXV0b3BsYXkvYXV0b3BsYXkucGx1Z2luXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtc2ltcGxlLXNsaWRlclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vc2ltcGxlLXNsaWRlci5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vc2ltcGxlLXNsaWRlci5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcclxuICBwcm92aWRlcnM6IFtTbGlkZXJFbmdpbmUsIFNsaWRlclN0b3JlLCBTbGlkZXJEcmFnZ2FibGVQbHVnaW4sIFNsaWRlclBhZ2luYXRpb25QbHVnaW4sIFNsaWRlck5hdmlnYXRpb25QbHVnaW4sIFNsaWRlckF1dG9wbGF5UGx1Z2luXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNpbXBsZVNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFNsaWRlckNvbmZpZztcclxuICBASW5wdXQoKSBzbGlkZVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBuYXZpZ2F0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQE91dHB1dCgpIHNsaWRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIGlzRHJhZ2dpbmdQb2ludGVyID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkcmFnU3RhcnRYID0gMDtcclxuICBwcml2YXRlIGRyYWdTdGFydFkgPSAwO1xyXG4gIHByaXZhdGUgbGFzdEluZGV4ID0gLTE7XHJcbiAgcHJpdmF0ZSBsYXN0U2xpZGVzUmVmOiBhbnlbXSB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBzdGF0ZSQhOiBPYnNlcnZhYmxlPFNsaWRlclZpZXdTdGF0ZT47XHJcbiAgQFZpZXdDaGlsZChcInNsaWRlckhvc3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHNsaWRlckhvc3Q/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVuZ2luZTogU2xpZGVyRW5naW5lLFxyXG4gICAgcHJpdmF0ZSBzdG9yZTogU2xpZGVyU3RvcmUsXHJcbiAgICBwcml2YXRlIGRyYWdnYWJsZTogU2xpZGVyRHJhZ2dhYmxlUGx1Z2luLFxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0aW9uOiBTbGlkZXJQYWdpbmF0aW9uUGx1Z2luLFxyXG4gICAgcHJpdmF0ZSBuYXZpZ2F0aW9uOiBTbGlkZXJOYXZpZ2F0aW9uUGx1Z2luLFxyXG4gICAgcHJpdmF0ZSBhdXRvcGxheTogU2xpZGVyQXV0b3BsYXlQbHVnaW4sXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc3RhdGUkID0gdGhpcy5zdG9yZS52aWV3JDtcclxuXHJcbiAgICB0aGlzLnN0YXRlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xyXG4gICAgICBpZiAoc3RhdGUuY3VycmVudFNsaWRlICE9PSB0aGlzLmxhc3RJbmRleCkge1xyXG4gICAgICAgIHRoaXMubGFzdEluZGV4ID0gc3RhdGUuY3VycmVudFNsaWRlO1xyXG4gICAgICAgIHRoaXMuc2xpZGVDaGFuZ2UuZW1pdChzdGF0ZS5jdXJyZW50U2xpZGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMubGFzdFNsaWRlc1JlZiA9IHRoaXMuY29uZmlnPy5zbGlkZXMgPz8gbnVsbDtcclxuICAgIHRoaXMucmVzb2x2ZVBsdWdpbnModGhpcy5jb25maWcpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7IC8vIOKGkCBtYXJrIGFmdGVyIGZpcnN0IHJlc29sdmVQbHVnaW5zXHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLnNsaWRlckhvc3Q/Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5lbmdpbmUuYXR0YWNoQ29udGFpbmVyKHRoaXMuc2xpZGVySG9zdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmICghY2hhbmdlc1tcImNvbmZpZ1wiXSB8fCAhdGhpcy5jb25maWcpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkgcmV0dXJuOyAvLyDihpAgc2tpcCB0aGUgcHJlLW5nT25Jbml0IGNhbGw7IG5nT25Jbml0IGhhbmRsZXMgaXRcclxuXHJcbiAgICBjb25zdCBuZXdTbGlkZXNSZWYgPSB0aGlzLmNvbmZpZy5zbGlkZXMgPz8gbnVsbDtcclxuXHJcbiAgICBpZiAobmV3U2xpZGVzUmVmICE9PSB0aGlzLmxhc3RTbGlkZXNSZWYpIHtcclxuICAgICAgdGhpcy5sYXN0U2xpZGVzUmVmID0gbmV3U2xpZGVzUmVmO1xyXG4gICAgICB0aGlzLmVuZ2luZS5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMucmVzb2x2ZVBsdWdpbnModGhpcy5jb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZGVzdHJveVNsaWRlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvVG8oaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5lbmdpbmUuc2VsZWN0U2xpZGUoaW5kZXgpOyAvLyBhZGQgdGhpcyBsaW5lXHJcbiAgICAvL3RoaXMuc2xpZGVDaGFuZ2UuZW1pdChpbmRleCk7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95U2xpZGVyKCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLmVuZ2luZS5kZXN0cm95KCk7XHJcbiAgfSAvLyBkZXN0cm95cyBwbHVnaW5zIGFuZCBjbGVhcnMgc3RvcmVcclxuXHJcbiAgb25OZXh0KCkge1xyXG4gICAgdGhpcy5lbmdpbmUubmV4dCgpO1xyXG4gIH1cclxuICBvblByZXZpb3VzKCkge1xyXG4gICAgdGhpcy5lbmdpbmUucHJldmlvdXMoKTtcclxuICB9XHJcbiAgc2VsZWN0U2xpZGUoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5lbmdpbmUuc2VsZWN0U2xpZGUoaW5kZXgpO1xyXG4gIH1cclxuICBvblJlY2FsY3VsYXRlKCkge1xyXG4gICAgdGhpcy5lbmdpbmUucmVjYWxjdWxhdGUoKTtcclxuICB9XHJcbiAgLy8gTmF2aWdhdGlvblxyXG4gIC8qKiBFeHBvc2UgbmF2aWdhdGlvbiBvYnNlcnZhYmxlcyBzYWZlbHkgKi9cclxuICBnZXQgY2FuUHJldiQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLm5hdmlnYXRpb24pIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiTmF2aWdhdGlvbiBwbHVnaW4gaXMgbm90IGVuYWJsZWQuXCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb24uY2FuUHJldiQ7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FuTmV4dCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLm5hdmlnYXRpb24pIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiTmF2aWdhdGlvbiBwbHVnaW4gaXMgbm90IGVuYWJsZWQuXCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb24uY2FuTmV4dCQ7XHJcbiAgfVxyXG5cclxuICAvKiogRXhwb3NlIG5leHQvcHJldiBtZXRob2RzICovXHJcbiAgcHVibGljIG5leHQoKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb24/Lm5leHQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmV2KCkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uPy5wcmV2KCk7XHJcbiAgfVxyXG5cclxuICAvKiogRXhwb3NlIHBhZ2luYXRpb24gb2JzZXJ2YWJsZSAqL1xyXG4gIGdldCBwYWdlciQoKTogT2JzZXJ2YWJsZTxQYWdlciB8IG51bGw+IHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMucGFnaW5hdGlvbikge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJQYWdpbmF0aW9uIHBsdWdpbiBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBzbGlkZXIuXCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb24ucGFnZXIkO1xyXG4gIH1cclxuXHJcbiAgLyoqIEV4cG9zZSBhIGdvVG9TbGlkZSBtZXRob2QgKi9cclxuICBwdWJsaWMgZ29Ub1NsaWRlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMucGFnaW5hdGlvbi5nb1RvU2xpZGUoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIFBvaW50ZXJzXHJcblxyXG4gIG9uUG9pbnRlckRvd24oZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xyXG4gICAgLy8gT25seSBzdGFydCBkcmFnIGlmIG5vdCBjbGlja2luZyBhIG5hdiBidXR0b25cclxuICAgIGlmICgoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFwiLm5hdi1idG5cIikpIHtcclxuICAgICAgcmV0dXJuOyAvLyBpZ25vcmVcclxuICAgIH1cclxuICAgIHRoaXMuZHJhZ1N0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICB0aGlzLmRyYWdTdGFydFkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgdGhpcy5pc0RyYWdnaW5nUG9pbnRlciA9IGZhbHNlO1xyXG5cclxuICAgIC8vIERvIG5vdCBjYXB0dXJlIHlldDsgd2FpdCB1bnRpbCBtb3ZlbWVudCBleGNlZWRzIHRocmVzaG9sZFxyXG4gICAgdGhpcy5lbmdpbmUuaGFuZGxlRHJhZ1N0YXJ0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uUG9pbnRlck1vdmUoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xyXG4gICAgY29uc3QgZHggPSBNYXRoLmFicyhldmVudC5jbGllbnRYIC0gdGhpcy5kcmFnU3RhcnRYKTtcclxuICAgIGNvbnN0IGR5ID0gTWF0aC5hYnMoZXZlbnQuY2xpZW50WSAtIHRoaXMuZHJhZ1N0YXJ0WSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmdQb2ludGVyICYmIChkeCA+IDUgfHwgZHkgPiA1KSkge1xyXG4gICAgICB0aGlzLmlzRHJhZ2dpbmdQb2ludGVyID0gdHJ1ZTtcclxuXHJcbiAgICAgIC8vIE5vdyBzdGFydCBjYXB0dXJpbmcgcG9pbnRlciBzbyBkcmFnZ2luZyB3b3JrcyBvdXRzaWRlIHRoZSBzbGlkZXIgYm91bmRzXHJcbiAgICAgIChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRHJhZ2dpbmdQb2ludGVyKSB7XHJcbiAgICAgIHRoaXMuZW5naW5lLmhhbmRsZURyYWdNb3ZlKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUG9pbnRlclVwKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIGlmICghZXZlbnQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZ1BvaW50ZXIpIHtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgLy8gT25seSBzZWxlY3QgdGhlIHNsaWRlIGlmIGNsaWNrIGlzIG5vdCBvbiBhbiBpbnRlcmFjdGl2ZSBjaGlsZFxyXG4gICAgICBjb25zdCBzbGlkZUVsID0gdGFyZ2V0LmNsb3Nlc3QoXCIuc2xpZGVcIik7XHJcbiAgICAgIGlmIChzbGlkZUVsICYmICF0YXJnZXQuY2xvc2VzdChcImJ1dHRvbiwgdmlkZW8sIGFcIikpIHtcclxuICAgICAgICBjb25zdCBpbmRleEF0dHIgPSBzbGlkZUVsLmdldEF0dHJpYnV0ZShcImRhdGEtaW5kZXhcIik7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbmRleEF0dHIgPyBwYXJzZUludChpbmRleEF0dHIsIDEwKSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsKSB0aGlzLmVuZ2luZS5zZWxlY3RTbGlkZShpbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVuZ2luZS5oYW5kbGVEcmFnRW5kKCk7XHJcbiAgICB0aGlzLmlzRHJhZ2dpbmdQb2ludGVyID0gZmFsc2U7XHJcblxyXG4gICAgLy8gUmVsZWFzZSBwb2ludGVyIGNhcHR1cmUgaWYgaXQgd2FzIGNhcHR1cmVkXHJcbiAgICB0cnkge1xyXG4gICAgICAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XHJcbiAgICB9IGNhdGNoIHt9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc29sdmVQbHVnaW5zKGNvbmZpZzogU2xpZGVyQ29uZmlnKSB7XHJcbiAgICBjb25zdCBydW50aW1lUGx1Z2luczogU2xpZGVyUGx1Z2luW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBjZmcgPSBjb25maWcucGx1Z2lucyA/PyB7fTsgLy8gPC0tIHNhZmUgZmFsbGJhY2tcclxuXHJcbiAgICBpZiAoY2ZnLmRyYWdnYWJsZSkgcnVudGltZVBsdWdpbnMucHVzaCh0aGlzLmRyYWdnYWJsZSk7XHJcbiAgICBpZiAoY2ZnLnBhZ2luYXRpb24pIHJ1bnRpbWVQbHVnaW5zLnB1c2godGhpcy5wYWdpbmF0aW9uKTtcclxuICAgIGlmIChjZmcubmF2aWdhdGlvbikgcnVudGltZVBsdWdpbnMucHVzaCh0aGlzLm5hdmlnYXRpb24pO1xyXG4gICAgaWYgKGNmZy5hdXRvcGxheSkgcnVudGltZVBsdWdpbnMucHVzaCh0aGlzLmF1dG9wbGF5KTsgLy8g4oaQIGFkZCBCRUZPUkUgaW5pdCwgbm8gc2V0Q29uZmlnIHlldFxyXG5cclxuICAgIHRoaXMuZW5naW5lLmluaXQoeyAuLi5jb25maWcsIHBsdWdpbnM6IHVuZGVmaW5lZCB9LCBydW50aW1lUGx1Z2lucyk7XHJcblxyXG4gICAgLy8g4oaQIGNhbGwgc2V0Q29uZmlnIEFGVEVSIGVuZ2luZS5pbml0IHNvIHRoaXMuZW5naW5lIGlzIHNldCBpbnNpZGUgdGhlIHBsdWdpblxyXG4gICAgaWYgKGNmZy5hdXRvcGxheSkge1xyXG4gICAgICB0aGlzLmF1dG9wbGF5LnNldENvbmZpZyhjZmcuYXV0b3BsYXkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNmZy5uYXZpZ2F0aW9uKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uYXZpZ2F0aW9uPy51cGRhdGVBcnJvd3M/LigpKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlJCB8IGFzeW5jIGFzIHN0YXRlXCI+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJzbGlkZXJcIlxyXG4gICAgI3NsaWRlckhvc3RcclxuICAgIFtjbGFzcy5zbGlkZXItdmVydGljYWxdPVwic3RhdGUudmVydGljYWxcIlxyXG4gICAgW2NsYXNzLnNsaWRlci1kcmFnZ2FibGVdPVwic3RhdGUuaXNEcmFnZ2luZ1wiXHJcbiAgICBbY2xhc3Muc2xpZGVyLS1tYWluXT1cIiFjb25maWcuaXNUaHVtYnNcIlxyXG4gICAgW2NsYXNzLnNsaWRlci0tdGh1bWJzXT1cImNvbmZpZy5pc1RodW1ic1wiXHJcbiAgICAqbmdJZj1cInN0YXRlLnZpc2libGVTbGlkZXM/Lmxlbmd0aCA+IDAgJiYgc3RhdGUuaXNWaXNpYmxlXCJcclxuICAgIChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duKCRldmVudClcIlxyXG4gICAgKHBvaW50ZXJtb3ZlKT1cIm9uUG9pbnRlck1vdmUoJGV2ZW50KVwiXHJcbiAgICAocG9pbnRlcnVwKT1cIm9uUG9pbnRlclVwKCRldmVudClcIlxyXG4gICAgKHBvaW50ZXJjYW5jZWwpPVwib25Qb2ludGVyVXAoJGV2ZW50KVwiPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cInNsaWRlcl9fd3JhcHBlclwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICB0cmFuc2Zvcm06IHN0YXRlLnRyYW5zbGF0ZSxcclxuICAgICAgICB0cmFuc2l0aW9uOiBzdGF0ZS5pc0RyYWdnaW5nIHx8IHN0YXRlLnNpbGVudEp1bXAgPyAnbm9uZScgOiAndHJhbnNmb3JtIDAuNXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJyxcclxuXHJcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgICdmbGV4LWRpcmVjdGlvbic6IHN0YXRlLnZlcnRpY2FsID8gJ2NvbHVtbicgOiAncm93JyxcclxuICAgICAgICAnanVzdGlmeS1jb250ZW50Jzogc3RhdGUudmlzaWJsZVNsaWRlcz8ubGVuZ3RoIDwgc3RhdGUuc2xpZGVzUGVyVmlldyA/ICdjZW50ZXInIDogJ2ZsZXgtc3RhcnQnLFxyXG4gICAgICAgIGdhcDogKHN0YXRlLnNsaWRlc1BlclZpZXcgPiAxID8gc3RhdGUuZ2FwIHx8IDAgOiAwKSArICdweCcsXHJcbiAgICAgIH1cIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBzbGlkZSBvZiBzdGF0ZS52aXNpYmxlU2xpZGVzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICBjbGFzcz1cInNsaWRlXCJcclxuICAgICAgICBbYXR0ci5kYXRhLWluZGV4XT1cImlcIlxyXG4gICAgICAgIFtjbGFzcy5zbGlkZS0tY3VycmVudF09XCJzdGF0ZS5zZWxlY3RlZFNsaWRlID09PSBpXCJcclxuICAgICAgICBbc3R5bGUuZmxleF09XCJcclxuICAgICAgICAgICFjb25maWcuaXNUaHVtYnNcclxuICAgICAgICAgICAgPyAnMCAwIGNhbGMoJyArXHJcbiAgICAgICAgICAgICAgMTAwIC8gc3RhdGUuc2xpZGVzUGVyVmlldyArXHJcbiAgICAgICAgICAgICAgJyUgLSAnICtcclxuICAgICAgICAgICAgICAoKHN0YXRlLmdhcCB8fCAwKSAqIChzdGF0ZS5zbGlkZXNQZXJWaWV3IC0gMSkpIC8gc3RhdGUuc2xpZGVzUGVyVmlldyArXHJcbiAgICAgICAgICAgICAgJ3B4KSdcclxuICAgICAgICAgICAgOiAnMCAwICcgKyB0aHVtYlNpemUgKyAncHgnXHJcbiAgICAgICAgXCJcclxuICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29uZmlnLmlzVGh1bWJzID8gdGh1bWJTaXplICsgJ3B4JyA6IG51bGxcIlxyXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiY29uZmlnLmlzVGh1bWJzID8gdGh1bWJTaXplICsgJ3B4JyA6IG51bGxcIlxyXG4gICAgICAgIChjbGljayk9XCJlbmdpbmUuc2VsZWN0U2xpZGUoaSlcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNsaWRlVGVtcGxhdGUgPyBzbGlkZVRlbXBsYXRlIDogZGVmYXVsdFNsaWRlVGVtcGxhdGU7IGNvbnRleHQ6IHsgc2xpZGU6IHNsaWRlLCBpbmRleDogaSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=